package com.ts.code.creator.creator.impl;

import com.ts.code.creator.enums.CreateFileEnum;
import com.ts.code.creator.enums.ParamTypeEnum;
import com.ts.code.creator.util.CreateCodeContext;
import com.ts.code.creator.util.StringUtil;

/**
 * 聚合层 controller
 */
public class ProviderInterfaceCreator extends AbstractCodeCreator {

    public ProviderInterfaceCreator(CreateCodeContext context) {
        super(context);
    }

    @Override
    protected CreateFileEnum createFileEnum() {
        return CreateFileEnum.PROVIDER_INTERFACE;
    }

    @Override
    public void doCreate() {
        // provider client
        addMethod(classFileSearch.providerInterface(), providerInterface(context));
    }

    private String providerInterface(CreateCodeContext context) {
        // /**
        //     * 单个查询
        //     *
        //     * @param reqDTO 参数
        //     * @return 结果
        //     */
        //    @PostMapping("/get")
        //    Result<WelfareGetRespDTO> get(@RequestBody @Valid WelfareGetReqDTO reqDTO);

        // 备注
        String text = remark("reqDTO");
        // 请求url
        text += String.format("    @PostMapping(\"%s\")\n", StringUtil.nameToUrl(context.getMethodName()));
        // 参数
        String param = "";
        if (context.getParamTypeEnum() != ParamTypeEnum.NONE) {
            param = "@RequestBody @Valid " + reqDTO();
        }
        // 接口方法
        text += String.format("    Result<%s> %s(%s);",
                respDTO(), context.getMethodName(), param);
        return text;
    }

}
